package cn.yuanqiao.archive.liyong.service.impl;

import cn.yuanqiao.archive.appManager.domain.DataScopeBase;
import cn.yuanqiao.archive.appManager.domain.TenantCategory;
import cn.yuanqiao.archive.appManager.mapper.TenantCategoryMapper;
import cn.yuanqiao.archive.liyong.domain.YqDy;
import cn.yuanqiao.archive.liyong.domain.YqdyDa;
import cn.yuanqiao.archive.liyong.mapper.YqDyMapper;
import cn.yuanqiao.archive.liyong.mapper.YqdyDaMapper;
import cn.yuanqiao.archive.liyong.service.IYqDyService;
import cn.yuanqiao.archive.liyong.service.IYqdyDaService;
import cn.yuanqiao.common.utils.DateUtils;
import cn.yuanqiao.common.utils.SnowflakeIdGenerator;
import cn.yuanqiao.common.core.domain.AjaxResult;
import cn.yuanqiao.common.utils.SecurityUtils;
import cn.yuanqiao.common.core.domain.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static cn.yuanqiao.common.core.domain.AjaxResult.error;
import static cn.yuanqiao.common.core.domain.AjaxResult.success;

/**
 * 我的订阅Service业务层处理
 * 
 * @author sy
 * @date 2023-08-10
 */
@Service
public class YqDyServiceImpl implements IYqDyService
{
    @Autowired
    private YqDyMapper yqDyMapper;

    @Autowired
    private YqdyDaMapper yqdyDaMapper;

    @Autowired
    private IYqdyDaService yqdyDaService;

    @Autowired
    private TenantCategoryMapper tenantCategoryMapper;

    /**
     * 查询我的订阅
     * 
     * @param dyId 我的订阅主键
     * @return 我的订阅
     */
    @Override
    public Map<String, List> selectYqDyByDyId(Long dyId)
    {

        return yqdyDaService.selectYqdyDaListByDyId(dyId);
    }

    /**
     * 查询我的订阅列表
     *
     * @param yqDy 我的订阅
     * @return 我的订阅
     */
    @Override
    public YqDy selectYqDyByDyGjc(YqDy yqDy)
    {
        return yqDyMapper.selectYqDyByDyGjc(yqDy);
    }

    /**
     * 查询我的订阅列表
     * 
     * @param yqDy 我的订阅
     * @return 我的订阅
     */
    @Override
    public List<YqDy> selectYqDyList(YqDy yqDy)
    {
        return yqDyMapper.selectYqDyList(new DataScopeBase(yqDy.getMenuId()),yqDy);
    }

    /**
     * 新增我的订阅
     * 
     * @param yqDy 我的订阅
     * @return 结果
     */
    @Override
    public String insertYqDy(YqDy yqDy)
    {
        List<Map> result = new ArrayList<>();
        StringBuilder successMsg = new StringBuilder();
        LoginUser user = SecurityUtils.getLoginUser();

        if(user == null){
            user = new LoginUser();
            user.setUserId(1L);
        }
        yqDy.setGdcsId(user.getUser().getDeptId());
        if (yqDyMapper.isOnly(yqDy)!=0){
            successMsg.append("关键词为：”"+yqDy.getGjc()+"”的订阅已存在！");
        }else {

            String userCode =  SecurityUtils.getTenantCode();
            yqDy.setDyId(SnowflakeIdGenerator.generateId());
            yqDy.setCreatorId(user.getUserId());
            yqDy.setCreateTime(DateUtils.getNowDate());

            if(yqDyMapper.insertYqDy(yqDy)>0){
                //触发定时任务
                yqdyDaService.search(userCode,yqDy);
                //查询订阅详情列表
//                result = yqdyDaService.selectYqdyDaListByDyId(yqDy.getDyId());
//                ajaxResult.success("添加成功！",result);
                successMsg.append("添加成功！");
            }else {
                successMsg.append("添加失败！");
            }
        }
        return successMsg.toString();
    }

    /**
     * 修改我的订阅
     * 
     * @param yqDy 我的订阅
     * @return 结果
     */
    @Override
    public int updateYqDy(YqDy yqDy)
    {

        return yqDyMapper.updateYqDy(yqDy);
    }

    /**
     * 批量删除我的订阅
     * 
     * @param dyIds 需要删除的我的订阅主键
     * @return 结果
     */
    @Override
    public int deleteYqDyByDyIds(Long[] dyIds)
    {
        String userCode =  SecurityUtils.getTenantCode();
        String yqDyTable = userCode + "_YQDY";
        String yqDyDaTable = userCode + "_YQDY_DA";
        String yqXxTzTable = userCode + "_YQXXTZ";
        int affectedRows1 = yqDyMapper.deleteYqDyByDyIds(yqDyTable,dyIds);
        int affectedRows2 = yqDyMapper.deleteYqDyDaByDyIds(yqDyDaTable,dyIds);
        int affectedRows3 = yqDyMapper.deleteYqXxTzByRecordIds(yqXxTzTable,dyIds);
        int deletedCount = affectedRows1 + affectedRows2 + affectedRows3;
        return deletedCount;
    }

    /**
     * 删除我的订阅信息
     * 
     * @param dyId 我的订阅主键
     * @return 结果
     */
    @Override
    public int deleteYqDyByDyId(Long dyId)
    {
        return yqDyMapper.deleteYqDyByDyId(dyId);
    }

    /**
     * 获取门类id
     *
     * @param yqdyDa 分表表名
     * @return 结果
     */
    @Override
    public AjaxResult selectTenantCategoryByTableName(YqdyDa yqdyDa)
    {
        //判断档案现在的状态
        if (!(yqdyDaMapper.selectDaState(yqdyDa)==5)){
            //删除订阅档案中间表中的数据
            yqdyDaMapper.deleteYqdyDaByDyId(yqdyDa);
            //修改订阅表中的消息数目（-1）
            YqDy yqDy = new YqDy();
            yqDy.setDyId(yqdyDa.getDyId());
            yqDyMapper.updateYqDyXxsm(yqDy);
            return error(500,"档案已经被退回！");
        }
        Long categoryId = tenantCategoryMapper.selectTenantCategoryByTableName(yqdyDa.getSubTableName(),new TenantCategory().getTableName()).getId();
        return success(categoryId);
    }
}
